package day6;

import org.junit.Test;

public class Demo {

	@Test
	public void test1() {
		Add add = new Add(3, 5);
		//int result1 = add.getResult();
		//System.out.println(result1);
		fun1(add);
		fun(add);
		
		Sub sub = new Sub(3, 5);
		//int result2 = sub.getResult();
		//System.out.println(result2);
		fun2(sub);
		fun(sub);
		
		// 你继承什么就是什么
		// 可以new子类对象赋给父类
		AbstractCal cal = new Add(3, 5);
		int result3 = cal.getResult();
		System.out.println(result3);
		
//		// 声明成父类的变量cal，可以指向new出来的其他子类对象
		cal = new Sub(3, 5);
		int result4 = cal.getResult();
		System.out.println(result4);
	}
	
	// 形参声明成父类类型，不写具体的子类类型，实参可以是任何new出来的子类对象
	public void fun(AbstractCal cal) {
		int result = cal.getResult();
		System.out.println(result);
	}
	
	// function
	// Add add = new Add(3, 5);
	public void fun1(Add add) {
		int result = add.getResult();
		System.out.println(result);
	}
	
	// Sub sub = new Sub(3, 5)
	public void fun2(Sub sub) {
		int result = sub.getResult();
		System.out.println(result);
	}
	
}
